【MySQL】DEFAULT制約 - カラムの初期値

【MySQL】DEFAULT制約 - カラムの初期値

MySQLのDEFAULT制約について解説します。

検証環境

DEFAULT制約

DEFAULT制約は“カラムの初期値を設定する制約”です。

テーブルのレコード(データ)追加時に値を指定しない(DEFAULT制約がない)場合、初期値としてNULLが設定されます。

mysql> CREATE TABLE sample ( num INT );
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO sample VALUE ();
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM sample;
+------+
| num  |
+------+
| NULL |
+------+
1 row in set (0.00 sec)

この初期値をDEFAULT制約で任意の値に変更できます。

基本構文

カラム定義 DEFAULT 値

カラム定義に続いてDEFAULT 値を記述します。

の部分は任意の初期値です。

サンプル

___ih_hl_start
mysql> CREATE TABLE sample ( num INT DEFAULT 8);
___ih_hl_end
Query OK, 0 rows affected (0.01 sec)

___ih_hl_start
mysql> INSERT INTO sample VALUE ();
___ih_hl_end
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM sample;
+------+
| num  |
+------+
|    8 |
+------+
1 row in set (0.00 sec)

1行目のsampleテーブルの定義において、numカラムの初期値をDEFAULT制約で8にしています。

4行目のレコード追加では、numカラムの値が未指定ですが、7行目の取得の結果から初期値の8が適用されたことが分かります。

また、レコード追加時の値にDEFAULTを明示的に記述し、初期値を設定できます。

mysql> CREATE TABLE sample ( num INT DEFAULT 8);
Query OK, 0 rows affected (0.01 sec)

___ih_hl_start
mysql> INSERT INTO sample VALUE ( DEFAULT );
___ih_hl_end
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM sample;
+------+
| num  |
+------+
|    8 |
+------+
1 row in set (0.00 sec)

制約の確認

DEFAULT制約はDESCを使ったテーブル情報で確認できます。

mysql> CREATE TABLE sample ( num1 INT, num2 INT DEFAULT 8);
Query OK, 0 rows affected (0.00 sec)

mysql> DESC sample;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| num1  | int  | YES  |     | NULL    |       |
| num2  | int  | YES  |     | 8       |       |
+-------+------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql>

DEFAULTの項目の値がカラムの初期値です。